home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / usr_-_Usr_Files / INCLUDE / MATH.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  15KB  |  419 lines

  1. /* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
  2. This file is part of the GNU C Library.
  3.  
  4. The GNU C Library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of the
  7. License, or (at your option) any later version.
  8.  
  9. The GNU C Library is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with the GNU C Library; see the file COPYING.LIB.  If
  16. not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
  17. Cambridge, MA 02139, USA.  */
  18.  
  19. /*
  20.  *      ANSI Standard: 4.5 MATHEMATICS  <math.h>
  21.  */
  22.  
  23. #ifndef    _MATH_H
  24. #define    _MATH_H
  25.  
  26. #include <features.h>
  27.  
  28. __BEGIN_DECLS
  29.  
  30. /* Trigonometric functions.  */
  31.  
  32. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  33. /* Arc cosine of X.  */
  34. extern __CONSTVALUE double acos __P ((double __x));
  35. /* Arc sine of X.  */
  36. extern __CONSTVALUE double asin __P ((double __x));
  37. /* Arc tangent of X.  */
  38. extern __CONSTVALUE double atan __P ((double __x)) __CONSTVALUE2;
  39. #endif /* m68k inlines */
  40. /* Arc tangent of Y/X.  */
  41. extern __CONSTVALUE double atan2 __P ((double __y, double __x)) __CONSTVALUE2;
  42.  
  43. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  44. /* Cosine of X.  */
  45. extern __CONSTVALUE double cos __P ((double __x)) __CONSTVALUE2;
  46. /* Sine of X.  */
  47. extern __CONSTVALUE double sin __P ((double __x)) __CONSTVALUE2;
  48. /* Tangent of X.  */
  49. extern __CONSTVALUE double tan __P ((double __x)) __CONSTVALUE2;
  50.  
  51.  
  52. /* Hyperbolic functions.  */
  53.  
  54. /* Hyperbolic cosine of X.  */
  55. extern __CONSTVALUE double cosh __P ((double __x)) __CONSTVALUE2;
  56. /* Hyperbolic sine of X.  */
  57. extern __CONSTVALUE double sinh __P ((double __x)) __CONSTVALUE2;
  58. /* Hyperbolic tangent of X.  */
  59. extern __CONSTVALUE double tanh __P ((double __x)) __CONSTVALUE2;
  60. #endif /* m68k inlines */
  61.  
  62. /* Hyperbolic arc cosine of X.  */
  63. extern __CONSTVALUE double acosh __P ((double __x));
  64. /* Hyperbolic arc sine of X.  */
  65. extern __CONSTVALUE double asinh __P ((double __x));
  66. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  67. /* Hyperbolic arc tangent of X.  */
  68. extern __CONSTVALUE double atanh __P ((double __x));
  69. #endif /* m68k inlines */
  70.  
  71. /* Exponential and logarithmic functions.  */
  72.  
  73. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  74. /* Exponentional function of X.  */
  75. extern __CONSTVALUE double exp __P ((double __x)) __CONSTVALUE2;
  76.  
  77. /* Break VALUE into a normalized fraction and an integral power of 2.  */
  78. extern              double frexp __P ((double __x, int *__exp));
  79.  
  80. /* X times (two to the EXP power).  */
  81. extern __CONSTVALUE double ldexp __P ((double __x, int __exp));
  82.  
  83. /* Natural logarithm of X.  */
  84. extern __CONSTVALUE double log __P ((double __x));
  85.  
  86. /* Base-ten logarithm of X.  */
  87. extern __CONSTVALUE double log10 __P ((double __x));
  88.  
  89. /* Return exp(X) - 1.  */
  90. extern __CONSTVALUE double expm1 __P ((double __x)) __CONSTVALUE2;
  91.  
  92. /* Return log(1 + X).  */
  93. extern __CONSTVALUE double log1p __P ((double __x));
  94.  
  95. /* Break VALUE into integral and fractional parts.  */
  96. extern              double modf __P ((double __x, double *__iptr));
  97. #endif /* m68k inlines */
  98.  
  99.  
  100. /* Power functions.  */
  101.  
  102. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  103. /* Return X to the Y power.  */
  104. extern __CONSTVALUE double pow __P ((double __x, double __y));
  105.  
  106. /* Return the square root of X.  */
  107. extern __CONSTVALUE double sqrt __P ((double __x));
  108. #endif /* m68k inlines */
  109.  
  110. /* Return the cube root of X.  */
  111. extern __CONSTVALUE double cbrt  __P ((double __x)) __CONSTVALUE2;
  112.  
  113.  
  114. /* Nearest integer, absolute value, and remainder functions.  */
  115.  
  116. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  117. /* Smallest integral value not less than X.  */
  118. extern __CONSTVALUE double ceil __P ((double __x)) __CONSTVALUE2;
  119.  
  120. /* Absolute value of X.  */
  121. extern __CONSTVALUE double fabs __P ((double __x)) __CONSTVALUE2;
  122.  
  123. /* Largest integer not greater than X.  */
  124. extern __CONSTVALUE double floor __P ((double __x)) __CONSTVALUE2;
  125.  
  126. /* Floating-point modulo remainder of X/Y.  */
  127. extern __CONSTVALUE double fmod __P ((double __x, double __y)) __CONSTVALUE2;
  128.  
  129.  
  130. /* Return 0 if VALUE is finite or NaN, +1 if it
  131.    is +Infinity, -1 if it is -Infinity.  */
  132. extern __CONSTVALUE int __isinf __P ((double __value)) __CONSTVALUE2;
  133.  
  134. /* Return nonzero if VALUE is not a number.  */
  135. extern __CONSTVALUE int __isnan __P ((double __value)) __CONSTVALUE2;
  136. #endif /* m68k inlines */
  137.  
  138. /* Return nonzero if VALUE is finite and not NaN.  */
  139. extern __CONSTVALUE int __finite __P ((double __value)) __CONSTVALUE2;
  140. #ifdef    __OPTIMIZE__
  141. #define    __finite(value)    (!__isinf (value) && !__isnan (value))
  142. #endif
  143.  
  144. /* Deal with an infinite or NaN result.
  145.    If ERROR is ERANGE, result is +Inf;
  146.    if ERROR is - ERANGE, result is -Inf;
  147.    otherwise result is NaN.
  148.    This will set `errno' to either ERANGE or EDOM,
  149.    and may return an infinity or NaN, or may do something else.  */
  150. extern double __infnan __P ((int __error));
  151. extern long double __infnanl __P((int __error));
  152.  
  153. /* Return X with its signed changed to Y's.  */
  154. extern __CONSTVALUE double __copysign __P ((double __x,
  155.                         double __y)) __CONSTVALUE2;
  156.  
  157. extern __CONSTVALUE __long_double_t __copysignl __P ((__long_double_t __x,
  158.                               __long_double_t __y )) 
  159.      __CONSTVALUE2;
  160.  
  161.  
  162. #if !defined(__mc68000__) || defined (__NO_MATH_INLINES)
  163. /* Return the integer nearest X in the direction of the
  164.    prevailing rounding mode.  */
  165. extern __CONSTVALUE double __rint __P ((double __x)) __CONSTVALUE2;
  166. extern __CONSTVALUE double rint __P ((double __x)) __CONSTVALUE2;
  167. #endif /* m68k inlines */
  168.  
  169. /* Return `sqrt(X*X + Y*Y)'.  */
  170. extern __CONSTVALUE double hypot __P ((double __x, double __y)) __CONSTVALUE2;
  171.  
  172. #ifdef    __USE_MISC
  173.  
  174. extern __CONSTVALUE int isinf __P ((double __value)) __CONSTVALUE2;
  175. extern __CONSTVALUE int isinfl __P ((__long_double_t __value)) __CONSTVALUE2;
  176. extern __CONSTVALUE int isnan __P ((double __value)) __CONSTVALUE2;
  177. extern __CONSTVALUE int isnanl __P ((__long_double_t __value)) __CONSTVALUE2;
  178. extern __CONSTVALUE int finite __P ((double __value)) __CONSTVALUE2;
  179. extern __CONSTVALUE double infnan __P ((int __error)) __CONSTVALUE2;
  180. extern __CONSTVALUE __long_double_t infnanl __P ((int __error)) __CONSTVALUE2;
  181. extern __CONSTVALUE double copysign __P ((double __x,
  182.                       double __y)) __CONSTVALUE2;
  183. extern __CONSTVALUE __long_double_t copysignl __P ((__long_double_t __x,
  184.                             __long_double_t __y))
  185.      __CONSTVALUE2;
  186. extern __CONSTVALUE double drem __P ((double __x, double __y)) __CONSTVALUE2;
  187.  
  188. /*
  189. #define FP_NAN       1
  190. #define FP_INFINITE  2
  191. #define FP_NORMAL    3
  192. #define FP_SUBNORMAL 4
  193. #define FP_ZERO      5
  194.  
  195. extern __CONSTVALUE int fpclassifyf( float _x) __CONSTVALUE2;
  196. extern __CONSTVALUE int fpclassifyd( double _x)  __CONSTVALUE2;
  197. extern __CONSTVALUE int fpclassifyl( __long_double_t _x) __CONSTVALUE2;
  198. */
  199.  
  200. #ifdef    __OPTIMIZE__
  201. #define    isinf(value)    __isinf(value)
  202. #define isinfl(value)    __isinfl(value)
  203. #define    isnan(value)    __isnan(value)
  204. #define    isnanl(value)    __isnanl(value)
  205. #define    infnan(error)    __infnan(error)
  206. #define    infnanl(error)    __infnanl(error)
  207. #define    finite(value)    __finite(value)
  208. #define    copysign(x, y)    __copysign((x), (y))
  209. #define    copysignl(x, y)    __copysignl((x), (y))
  210. #endif /* Optimizing.  */
  211.  
  212. #endif /* Use misc.  */
  213.  
  214.  
  215. /* some other functions not in GNU libc */
  216.  
  217. /* Return 2 to the X power.  */
  218. extern __CONSTVALUE double pow2 __P ((double __x)) __CONSTVALUE2;
  219.  
  220. /* Return 10 to the X power.  */
  221. extern __CONSTVALUE double pow10 __P ((double __x)) __CONSTVALUE2;
  222.  
  223. /* Return the error function of X. */
  224. extern __CONSTVALUE double erf  __P ((double __x)) __CONSTVALUE2;
  225.  
  226. /* Return the complementary error function of X.  */
  227. extern __CONSTVALUE double erfc  __P ((double __x)) __CONSTVALUE2;
  228.  
  229. /* Return the Bessel function of X of the first kind of order 0.  */
  230. extern __CONSTVALUE double j0  __P ((double __x)) __CONSTVALUE2;
  231.  
  232. /* Return the Bessel function of X of the first kind of order 1.  */
  233. extern __CONSTVALUE double j1  __P ((double __x)) __CONSTVALUE2;
  234.  
  235. /* Return the Bessel function of X of the first kind of order N.  */
  236. extern __CONSTVALUE double jn  __P ((int __n, double __x)) __CONSTVALUE2;
  237.  
  238. /* Return the log of the absolute value of the Gamma function of X.  */
  239. extern __CONSTVALUE double lgamma  __P ((double __x));
  240.  
  241. /* Return the Bessel function of X of the second kind of order 0.  */
  242. extern __CONSTVALUE double y0  __P ((double __x)) __CONSTVALUE2;
  243.  
  244. /* Return the Bessel function of X of the second kind of order 1.  */
  245. extern __CONSTVALUE double y1  __P ((double __x)) __CONSTVALUE2;
  246.  
  247. /* Return the Bessel function of X of the second kind of order N.  */
  248. extern __CONSTVALUE double yn  __P ((int __n, double __x)) __CONSTVALUE2;
  249.  
  250. #if !defined (__mc68000__) || defined (__NO_MATH_INLINES)
  251. extern __CONSTVALUE __long_double_t acosl __P ((__long_double_t __x));
  252. extern __CONSTVALUE __long_double_t asinl __P ((__long_double_t __x));
  253. extern __CONSTVALUE __long_double_t atanl __P ((__long_double_t __x));
  254. extern __CONSTVALUE __long_double_t cosl __P ((__long_double_t __x));
  255. extern __CONSTVALUE __long_double_t sinl __P ((__long_double_t __x));
  256. extern __CONSTVALUE __long_double_t tanl __P ((__long_double_t __x));
  257. #endif /* m68k inlines */
  258. extern __CONSTVALUE __long_double_t acoshl __P ((__long_double_t __x));
  259. extern __CONSTVALUE __long_double_t asinhl __P ((__long_double_t __x));
  260. #if !defined (__mc68000__) || defined (__NO_MATH_INLINES)
  261. extern __CONSTVALUE __long_double_t atanhl __P ((__long_double_t __x));
  262. extern __CONSTVALUE __long_double_t coshl __P ((__long_double_t __x));
  263. extern __CONSTVALUE __long_double_t sinhl __P ((__long_double_t __x));
  264. extern __CONSTVALUE __long_double_t tanhl __P ((__long_double_t __x));
  265. extern __CONSTVALUE __long_double_t expl __P ((__long_double_t __x));
  266. extern __CONSTVALUE __long_double_t expm1l __P ((__long_double_t __x)) __CONSTVALUE2;
  267. extern __long_double_t frexpl __P ((__long_double_t __value, int *__exp));
  268. extern __CONSTVALUE __long_double_t ldexpl __P ((__long_double_t __x, int __exp));
  269. extern __CONSTVALUE __long_double_t logl __P ((__long_double_t __x));
  270. extern __CONSTVALUE __long_double_t log10l __P ((__long_double_t __x));
  271. extern __long_double_t modfl __P ((__long_double_t __value, __long_double_t * __ip));
  272. extern __CONSTVALUE __long_double_t powl __P ((__long_double_t __x, __long_double_t __y));
  273. extern __CONSTVALUE __long_double_t sqrtl __P ((__long_double_t __x));
  274. #endif /* m68k inlines */
  275. extern __CONSTVALUE __long_double_t atan2l __P ((__long_double_t __y, __long_double_t __x));
  276. extern __CONSTVALUE __long_double_t hypotl __P ((__long_double_t __x, __long_double_t __y)) __CONSTVALUE2;
  277.  
  278. extern __CONSTVALUE __long_double_t erfl __P ((__long_double_t __x));
  279. extern __CONSTVALUE __long_double_t erfcl __P ((__long_double_t __x));
  280. extern __CONSTVALUE __long_double_t lgammal __P ((__long_double_t __x));
  281. extern __CONSTVALUE __long_double_t j0l __P ((__long_double_t __x));
  282. extern __CONSTVALUE __long_double_t y0l __P ((__long_double_t __x));
  283. extern __CONSTVALUE __long_double_t j1l __P ((__long_double_t __x));
  284. extern __CONSTVALUE __long_double_t y1l __P ((__long_double_t __x));
  285. extern __CONSTVALUE __long_double_t jnl __P ((int __n, __long_double_t __x));
  286. extern __CONSTVALUE __long_double_t ynl __P ((int __n, __long_double_t __x));
  287. extern __CONSTVALUE __long_double_t cbrtl __P ((__long_double_t __x));
  288. #if !defined (__mc68000__) || defined (__NO_MATH_INLINES)
  289. extern __CONSTVALUE __long_double_t log1pl __P ((__long_double_t __x));
  290. extern __CONSTVALUE __long_double_t log2l __P ((__long_double_t __x));
  291. extern __CONSTVALUE __long_double_t pow2l __P ((__long_double_t __x));
  292. extern __CONSTVALUE __long_double_t pow10l __P ((__long_double_t __x));
  293.  
  294. /* Smallest integral value not less than X.  */
  295. extern __CONSTVALUE __long_double_t ceill __P ((__long_double_t __x)) __CONSTVALUE2;
  296.  
  297. /* Absolute value of X.  */
  298. extern __CONSTVALUE __long_double_t fabsl __P ((__long_double_t __x)) __CONSTVALUE2;
  299.  
  300. /* Largest integer not greater than X.  */
  301. extern __CONSTVALUE __long_double_t floorl __P ((__long_double_t __x)) __CONSTVALUE2;
  302.  
  303. /* Floating-point modulo remainder of X/Y.  */
  304. extern __CONSTVALUE __long_double_t fmodl __P ((__long_double_t __x,
  305.                         __long_double_t __y)) __CONSTVALUE2;
  306.  
  307.  
  308. /* Return 0 if VALUE is finite or NaN, +1 if it
  309.    is +Infinity, -1 if it is -Infinity.  */
  310. extern __CONSTVALUE int __isinfl __P ((__long_double_t __value)) __CONSTVALUE2;
  311.  
  312. /* Return nonzero if VALUE is not a number.  */
  313. extern __CONSTVALUE int __isnanl __P ((__long_double_t __value)) __CONSTVALUE2;
  314. #endif /* m68k inlines */
  315.  
  316. __END_DECLS
  317.  
  318. extern int signgam;
  319. extern int signgaml;
  320.  
  321. /* Get machine-dependent HUGE_VAL value (returned on overflow).  */
  322. #include <huge_val.h>
  323.  
  324. /* Get machine-dependent NAN value (returned for some domain errors).  */
  325. #ifdef   __USE_GNU
  326. #include <nan.h>
  327. #endif
  328.  
  329. #include <float.h>
  330. #include <values.h>
  331.  
  332. #ifndef HUGE
  333. #define HUGE        DBL_MAX
  334. #endif
  335.  
  336. #ifndef HUGE_VAL
  337. #define HUGE_VAL    DBL_MAX
  338. #endif
  339.  
  340. #ifndef M_E
  341. #define M_E         2.7182818284590452354    /* e */
  342. #endif
  343. #ifndef M_LOG2E
  344. #define M_LOG2E     1.4426950408889634074    /* log 2e */
  345. #endif
  346. #ifndef M_LOG10E
  347. #define M_LOG10E    0.43429448190325182765    /* log 10e */
  348. #endif
  349. #ifndef M_LN2
  350. #define M_LN2       0.69314718055994530942    /* log e2 */
  351. #endif
  352. #ifndef M_LN10
  353. #define M_LN10      2.30258509299404568402    /* log e10 */
  354. #endif
  355. #ifndef M_PI
  356. #define M_PI        3.14159265358979323846    /* pi */
  357. #endif
  358. #ifndef M_PI_2
  359. #define M_PI_2      1.57079632679489661923    /* pi/2 */
  360. #endif
  361. #ifndef M_1_PI
  362. #define M_1_PI      0.31830988618379067154    /* 1/pi */
  363. #endif
  364. #ifndef M_PI_4
  365. #define M_PI_4      0.78539816339744830962    /* pi/4 */
  366. #endif
  367. #ifndef M_2_PI
  368. #define M_2_PI      0.63661977236758134308    /* 2/pi */
  369. #endif
  370. #ifndef M_2_SQRTPI
  371. #define M_2_SQRTPI  1.12837916709551257390    /* 2/sqrt(pi) */
  372. #endif
  373. #ifndef M_SQRT2
  374. #define M_SQRT2     1.41421356237309504880    /* sqrt(2) */
  375. #endif
  376. #ifndef M_SQRT1_2
  377. #define M_SQRT1_2   0.70710678118654752440    /* 1/sqrt(2) */
  378. #endif
  379.  
  380. #ifndef PI                      /* as in stroustrup */
  381. #define PI  M_PI
  382. #endif
  383. #ifndef PI2
  384. #define PI2  (M_PI + M_PI)
  385. #endif
  386.  
  387. #if defined(__mc68000__)
  388. # include <m68k/__math.h>
  389. #endif
  390.  
  391.  
  392. #ifndef __NO_MATH_INLINES
  393. #  include <ieee754.h>
  394. #  include <ieee854.h>
  395.  
  396. extern __inline __CONSTVALUE double __copysign __P ((double __x,
  397.                         double __y)) 
  398. {
  399.   union ieee754_double *__ux = (union ieee754_double *) &__x;
  400.   union ieee754_double *__uy = (union ieee754_double *) &__y;
  401.  
  402.   __ux->ieee.negative = __uy->ieee.negative;
  403.  
  404.   return __x;
  405. }
  406.  
  407. extern __inline __CONSTVALUE __long_double_t __copysignl __P ((__long_double_t __x, __long_double_t __y )) 
  408. {
  409.   union ieee854_double *__ux = (union ieee854_double *) &__x;
  410.   union ieee854_double *__uy = (union ieee854_double *) &__y;
  411.  
  412.   __ux->ieee.negative = __uy->ieee.negative;
  413.  
  414.   return __x;
  415. }
  416.  
  417. #endif /* __NO_MATH_INLINES */
  418. #endif /* _MATH_H */
  419.